package com.ruoyi.projects.utils;


import com.ruoyi.common.constant.WxAliConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.AccessToken;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.projects.domain.WechatConfig;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;

/**
 * 微信配置工具类
 *  对缓存进行操作，或存储配置参数，或存储平台凭证
 * @author yangz
 */
public class WechatConfigUtils {

    /**
     * 设置微信配置缓存
     *
     * @param key 参数键
     * @param wechatConfig 字典数据列表
     */
    public static void setWechatCache(String key, WechatConfig wechatConfig)
    {
        SpringUtils.getBean(RedisCache.class).setCacheObject(key, wechatConfig);
    }

    /**
     * 设置微信接口调用凭证缓存
     * @param key
     * @param accessToken
     */
    public static void setWechatAccessToken(String key, AccessToken accessToken)
    {
        SpringUtils.getBean(RedisCache.class).setCacheObject(key, accessToken);
    }


    /**
     * 获取微信配置缓存
     *
     * @param key 参数键
     * @return dictDatas 字典数据列表
     */
    public static WechatConfig getWechatCache(String key)
    {
        Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(key);
        if (StringUtils.isNotNull(cacheObj))
        {
            WechatConfig wechatConfig = StringUtils.cast(cacheObj);
            return wechatConfig;
        }
        return null;
    }

    /**
     * 获取微信接口调用凭证
     * @param key
     * @return
     */
    public static AccessToken getWechatAccessToken(String key)
    {
        Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(key);
        if (StringUtils.isNotNull(cacheObj))
        {
            AccessToken accessToken = StringUtils.cast(cacheObj);
            return accessToken;
        }
        return null;
    }

    /**
     * 删除微信配置redis缓存
     */
    public static void clearWechatCache()
    {
        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(WxAliConstants.REDIS_WECHAT_CONFIG);
        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
    }

    /**
     * 删除微信接口调用凭证accessToken的缓存
     */
    public static void clearWechatAccessToken()
    {
        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(WxAliConstants.REDIS_WECHAT_ACCESS_TOKEN);
        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
    }

    /**
     * 判断是否过期
     * @param date
     * @return
     * @throws ParseException
     */
    public static Boolean isExpries(Date date) throws ParseException {
        //格式化时间
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        String expriesTime = sdf.format(date);
        //将时间转换成毫秒值
        long lastTime = sdf.parse(expriesTime).getTime();
        //获取到现在的毫秒值
        long nowTime = System.currentTimeMillis();
        if(nowTime - lastTime > 59*60*1000){
            //有效时间超过59分钟既视为过期，1分钟留作缓存
            return false;
        }else {
            return true;
        }
    }

}
